package StructuralPattern.Proxy.StaticOrdinaryProxy;

/**
 * @Classname : ProxyClient
 * @Description : 测试 代理设计模式（静态 普通 代理）
 * 静态普通代理：直接创建代理角色，使用代理角色执行操作。
 * 使用建议：当具体角色只有一个代理角色时可以使用普通代理，建议使用约束创建方式，从而解除高层模块与具体角色的耦合。
 * @Author : chentianyu
 * @Date 2023/2/11 22:59
 */


public class ProxyClient {
    public static void main(String[] args) {
        System.out.println("具体角色执行操作");
        GamePlayer zhangsan = new ConcreteGamePlayer("zhangsan");
        zhangsan.login();
        zhangsan.killBoss();
        zhangsan.upgrade();
        System.out.println("--------------------------------------------------------------------");

        System.out.println("代理角色执行操作（具体角色创建）");
        GamePlayer proxy = new GamePlayerProxy(zhangsan);
        proxy.login();
        proxy.killBoss();
        proxy.upgrade();
        System.out.println("--------------------------------------------------------------------");

        System.out.println("代理角色执行操作（约束创建）");
        GamePlayer proxy2 = new GamePlayerProxy("zhangsan");
        proxy2.login();
        proxy2.killBoss();
        proxy2.upgrade();
        System.out.println("--------------------------------------------------------------------");
    }
}

/** 20230211
 * 具体角色执行操作
 * 玩家 zhangsan 登录成功！
 * 玩家 zhangsan 在打怪！
 * 玩家 zhangsan 又升了一级！
 * --------------------------------------------------------------------
 * 代理角色执行操作（具体角色创建）
 * 玩家 zhangsan 登录成功！
 * 玩家 zhangsan 在打怪！
 * 玩家 zhangsan 又升了一级！
 * 每升一级计费100元。
 * --------------------------------------------------------------------
 * 代理角色执行操作（约束创建）
 * 玩家 zhangsan 登录成功！
 * 玩家 zhangsan 在打怪！
 * 玩家 zhangsan 又升了一级！
 * 每升一级计费100元。
 * --------------------------------------------------------------------
 */
